tg-me.com/zen_of_python/4178
Last Update:
enum: где обладает преимуществом
Встроенный модуль enum
предоставляет удобный способ создания перечислений — наборов именованных констант, которые облегчают работу с фиксированными наборами значений. Это особенно полезно, когда необходимо ограничить возможные значения переменной определенным списком.
Рассмотрим функцию, которая получает температуру в заданном городе:
def get_temperature(city, unit):
...
Значение параметра
unit
может быть либо "celsius"
, либо "fahrenheit"
. Однако использование строковых литералов может привести к ошибкам из-за опечаток или несогласованности в написании. Чтобы избежать этого, можно использовать перечисление:
from enum import Enum
class TempUnit(Enum):
CELSIUS = "celsius"
FAHRENHEIT = "fahrenheit"
Теперь функция может быть вызвана так:
get_temperature("Lisbon", TempUnit.CELSIUS)
Это обеспечивает автодополнение в IDE, предотвращает опечатки и делает код более самодокументируемым.
Когда конкретные значения не имеют значения, можно использовать
auto
для автоматического присвоения значений:
from enum import Enum, auto
class Weekday(Enum):
MONDAY = auto()
TUESDAY = auto()
WEDNESDAY = auto()
В этом случае значения будут автоматически присвоены в порядке определения.
Модуль
enum
также предоставляет специализированные классы перечислений:— IntEnum: Подкласс
int
, позволяющий использовать перечисления в арифметических операциях;— Flag / IntFlag: Позволяют комбинировать значения с помощью побитовых операций, что полезно для представления множественных состояний.
В нем также представлены дополнительные инструменты для работы с перечислениями:
— EnumCheck: Позволяет проверять уникальность значений в перечислении;
— FlagBoundary: Управляет поведением при работе с недопустимыми значениями в перечислениях
Flag
;— EnumDict: Подкласс
dict
, используемый при создании метаклассов перечислений.#основы
@zen_of_python
BY Zen of Python

Share with your friend now:
tg-me.com/zen_of_python/4178